#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QStatusBar>
#include <QLabel>
#include <QDebug>
#include <QFileDialog>



MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    // 创建菜单栏
    QMenuBar* menubar = menuBar();
    this->setMenuBar(menubar);
    // 添加菜单
    QMenu* m1 = new QMenu("文件");
    // 将菜单加入菜单栏中
    menubar->addMenu(m1);

    // 创建菜单项
    QAction* a1 = new QAction("打开文件");
    QAction* a2 = new QAction("保存文件");
    // 将菜单项加入菜单中
    m1->addAction(a1);
    m1->addAction(a2);

    // 将文本编辑框与窗口一样大
    ui->plainTextEdit->setGeometry(0,0,this->width(),this->height());

    // 创建状态栏
    label = new QLabel(this);
    QStatusBar* status = this->statusBar();
    this->setStatusBar(status);
    status->addWidget(label);
    label->setText("这是一个状态栏");

    // 当点击菜单项时会发出信号  triggered
    // 对打开文件和保存文件关联信号槽
    connect(a1,&QAction::triggered,this,&MainWindow::HandlerOpen);
    connect(a2,&QAction::triggered,this,&MainWindow::HandlerSave);
}

void MainWindow::HandlerOpen()
{
//    qDebug() << "HandlerOpen"

    QString filename = QFileDialog::getOpenFileName(this,"打开文件");
    label->setText("开打文件: " + filename);
    // 创建文件对象
    QFile file(filename);
    // 以读的方式打开文件
    bool ret = file.open(QIODevice::ReadOnly);
    if(ret == false )
    {
        qDebug() << "打开文件失败";
        return;
    }
    // 读取文件内容
    //  QString & operator=(const QByteArray &ba)
    // readAll 返回的类型是 QByteArray
    // 只有读文本文件时可以直接赋值，如果读二进制文件，则不能直接赋值给QString
    QString content = file.readAll();

    // 将文件内容写到编辑框中
    ui->plainTextEdit->setPlainText(content);

    // 关闭文件
    file.close();

}

void MainWindow::HandlerSave()
{
    QString filename = QFileDialog::getSaveFileName(this,"保存文件");
    label->setText("保存文件: " + filename);
    QFile file(filename);
    bool ret = file.open(QIODevice::WriteOnly);
    if(ret == false)
    {
        qDebug() << "打开文件失败";
        return;
    }
    // 获取编辑框的内容
    QString content = ui->plainTextEdit->toPlainText();
    // QByteArray toUtf8() const &
    // QString -> QByteArray
    file.write(content.toUtf8());
    file.close();

}

MainWindow::~MainWindow()
{
    delete ui;
}

